模式匹配大致用了 4 個:
一個簡單的範例
test:test.o test1.o test2.o
gcc -o test test.o test1.o test2.o
@echo "@: $@ "
@echo "^: $^ "
@echo "<: $< "
test.o:test.c
gcc -o test.o -c test.c
test1.o:test1.c
gcc -o test1.o -c test1.c
test2.o:test2.c
gcc -o test2.o -c test2.c
clean:
rm -f test test.o test1.o test2.o
執行
make
輸出
gcc -o test.o -c test.c
gcc -o test1.o -c test1.c
gcc -o test2.o -c test2.c
gcc -o test test.o test1.o test2.o
@: test
^: test.o test1.o test2.o
<: test.o
我們來試著用 $@ $^ 來簡化
$@(所有的目標)、 $^(所有目標的依賴),所以我們可以將 gcc的部分簡化
gcc -o test.o -c test.c → gcc -o $@ -c $^
gcc -o test test.o test1.o test2.o → gcc -o $@ $^
test:test.o test1.o test2.o
gcc -o $@ $^
@echo "@: $@ "
@echo "^: $^ "
@echo "<: $< "
test.o:test.c
gcc -o $@ -c $^
test1.o:test1.c
gcc -o $@ -c $^
test2.o:test2.c
gcc -o $@ -c $^
clean:
rm -f test test.o test1.o test2.o
執行
make
輸出
gcc -o test.o -c test.c
gcc -o test1.o -c test1.c
gcc -o test2.o -c test2.c
gcc -o test test.o test1.o test2.o
@: test
^: test.o test1.o test2.o
<: test.o
我們來試著用 %.c %.o 來簡化
由於當前目錄下
1. "XXX.c" 就是 test.c test1.c test2.c
2. "XXX.o" 就是 test.o test1.o test2.o
3. 所以可以直接簡化為 %.o 與 %.c
test:test.o test1.o test2.o
gcc -o $@ $^
@echo "@: $@ "
@echo "^: $^ "
@echo "<: $< "
%.o:%.c
gcc -o $@ -c $^
clean:
rm -f test test.o test1.o test2.o
執行
make
輸出
gcc -o test.o -c test.c
gcc -o test1.o -c test1.c
gcc -o test2.o -c test2.c
gcc -o test test.o test1.o test2.o
@: test
^: test.o test1.o test2.o
<: test.o